#if !defined(__APP_SERIAL_H)
#define __APP_SERIAL_H

#include <termios.h>
#include "app_device.h"

/* 比特率 */
typedef enum{
    BR_9600 = B9600,
    BR_115200 = B115200
} BaudRate;

/* 校验位 */
typedef enum{
    Parity_NONE = 0,    // 无校验
    Parity_ODD = PARENB | PARODD,   // 奇校验
    Parity_EVEN = PARENB    // 偶校验
} Parity;

/* 停止位 */
typedef enum{
    SB_1 = 0,    // 1位
    SB_2 = CSTOPB    // 2位
} StopBit;

/**
 * @brief 设置波特率
 * 
 * @param device 设备结构体
 * @param baudRate 波特率
 * @return int 0: 成功, -1: 失败
 */
int app_serial_setBaudRate(Device *device, BaudRate baudRate);

/**
 * @brief 设置校验位
 * 
 * @param device 设备结构体
 * @param parity 校验位
 * @return int 0: 成功, -1: 失败
 */
int app_serial_setParity(Device *device, Parity parity);

/**
 * @brief 设置停止位
 * 
 * @param device 设备结构体
 * @param stopBit 停止位
 * @return int 0: 成功, -1: 失败
 */
int app_serial_setStopBit(Device *device, StopBit stopBit);

/**
 * @brief 设置阻塞模式
 * 
 * @param device 设备结构体
 * @param is_block 是否阻塞
 * @return int 0: 成功, -1: 失败
 */
int app_serial_setBlock(Device *device, int is_block);

/**
 * @brief 设置原始模式
 * 
 * @param device 设备结构体
 * @return int 0: 成功, -1: 失败
 */
int app_serial_setRaw(Device *device);

/**
 * @brief 初始化
 * 
 * @param device 设备结构体
 * @return int 0: 成功, -1: 失败
 */
int app_serial_init(Device *device);

/**
 * @brief 刷新
 * 
 * @param device 设备结构体
 * @return int 0: 成功, -1: 失败
 */
int app_serial_flush(Device *device);

#endif // __APP_SERIAL_H
